
/**
 * 异步转同步函数
 * 用法 :
 * 1/ var fs=_Syn(方法(),....);
 * 2/ fs.start();
 */
!function(e, t) {
	if ("object" == typeof exports && "object" == typeof module) module.exports._Syn = t;
	else if ("function" == typeof define && define.amd) define(t);
	else e._Syn = t; //对象
}(this, function() {
	var _funs = []; //函数
	if (arguments.length > 0)
		_funs = arguments;
	this.then = function(t) {
		_funs.push(t);
	};
	/*按顺序调用函数,但是每个函数第一个入参也是函数对象,函数对象被调用时,继续执行下一个函数,否则不执行*/
	function callw(funs) {
		if (funs.length == 0) return;
		if (_IS.isFun(funs[0])) {
			funs[0](function() {
				funs1 = funs.slice(1);
				callw(funs1);
			});
		}
	};
	//按顺序调用函数,
	function call(funs) {
		if (funs.length == 0) return;
		if (_IS.isFun(funs[0])) {
			funs[0]();
			funs1 = funs.slice(1);
			call(funs1);
		}
	};
	/**
	 * 开始按照从右到左的顺序执行函数集合
	 */
	this.start = function() {
		_funs = _Fun.a.concat(_funs, arguments)
		_funs.reverse();
		call(_funs);
	};
	/**
	 * 开始按照从右到左的顺序执行函数集合 ，执行的时候依赖 next()的调用
	 * 用时 
	 */
	this.startw = function() {
		_funs = _Fun.a.concat(_funs, arguments)
		_funs.reverse();
		callw(_funs);
	};
	return this;
});
